home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / Software / Servis / FFE / SOUND.SWG / 0044_FFF & DAT.pas < prev    next >
Pascal/Delphi Source File  |  1997-05-11  |  5KB  |  118 lines

  1. Simple FFF & DAT file format
  2. ==================================================
  3. Version 1.0, from 30.8.1996, ripped from GIPC 1.11
  4. (c)1996 by ChAr
  5. --------------------------------------------------
  6. Notice: This is very simple description, look into sources for more information.
  7.   In Version 2.0 software of drivers, there are possible, that some of items
  8.   have different meaning, but Gravis didn't release new GIPC for updating...
  9.   Use at your own risk...
  10. ---------------------------------------------------
  11.  
  12. FFF soubor - information about patches, all sections described below:
  13. offset, length, description
  14. 00000 - 0004   = "FFFF" file header info
  15. 00004 - 0004   = dword length whole .FFF - 8 (len of this header)
  16.  
  17.  
  18. 00000 - 0004   = "CPRT" copyright item identifier
  19. 00004 - 0004   = dword 0x2E - length of following datas (in bytes)
  20. 00008 - Length = Text copyright with len descr. above
  21.  
  22.  
  23. 00000 - 0004   = "DATA" patch data item identifier
  24. 00004 - 0004   = dword 5+strlen(name) - length of item
  25. 00008 - 0004   = iw_disk_id: w major_id=bankNum+0xFF00
  26.                  w minor_id=0
  27. 0000C - strlen = char "FILENAME.DAT", name of linked DAT file
  28. ***** - 0001   = char 0x00, end of file name (as in C++)
  29.  
  30.  
  31. 00000 - 0004   = "ENVP" envelope data item identifier
  32. 00004 - 0004   = dword len of envelopeinfo and inserted items
  33. 00008 - 0008   = iw_envp: w id.major_id=iw_patch.id.major_id (link to PTCH)
  34.               w id.minor_id=layer count for this PTCH
  35.               b h.num_envelopes=envelope count (samples in layer)
  36.               b h.flags=0
  37.               b h.mode=1(drums) || 2(melodic)
  38.               b h.index_type=0(drums) || 2(melodic)
  39. 00010 - ????   = num_envelopes * iw_envp_record: i nattack=attack envelope points
  40.                        i nrelease=release envelope points
  41.                        w sustain_offset
  42.                        w sustain_rate
  43.                        w release_rate
  44.                        b hirange=high MIDI note for envelope
  45.                        b pad=?? (not initialized!!??)
  46.          every iw_envp_record is followed with two arrays of dwords:
  47.            d envelope_pointers_attack[nattack] (w rate,offset pair)
  48.            d envelope_pointers_release[nrelease] (w rate,offset)
  49.  
  50.  
  51. 00000 - 0004  = "PROG" program data item identifier
  52. 00004 - 0004  = dword len of program info and inserted items
  53. 00008 - 0008  = iw_program: w id.id.major_id=0xAA00+patchNum (MIDI number of prg)
  54.                 w id.id.minor_id=0xAA00+bankNum (GS bank number)
  55.                 w version.id.major_id=1
  56.                 w version.id.minor_id=0
  57. 00010 - 0004  = "PTCH" id of subsection patch infos
  58. 00014 - 0004  = dword len of patch info subsection (0x14)
  59. 00018 - 0014  = iw_patch: w id.major_id=0x100+patchNum
  60.               w id.minor_id=0x100+bankNum
  61.               i nlayers=layer number (more samples at once)
  62.               c layer_mode=(program<128)||(nlayers>1)
  63.               c exclusion_mode=(exclusion==TRUE)
  64.               i exclusion_group=exclude number group
  65.               c effect1
  66.               c effect1_depth
  67.               c effect2
  68.               c effect2_depth
  69.               b bank=bankNum
  70.               b program=patchNum
  71.               p layers=NULL(0L)
  72. 0002C -       = follows iw_patch.nlayers subsection infos about layers
  73. 0002C - 0004  = "LAYR" id
  74. 00030 - 0004  = dword len of this subsection (0x2C)
  75. 00034 - 002C  = iw_layer: w id.major_id=iw_patch.id.major_id (link ident.)
  76.               w id.minor_id=layer number (0 .. nlayers-1)
  77.               c nwaves=number of WAVE subsections in this layer
  78.               c flags=0
  79.               c high_range=0(drums) or 255(melodic)
  80.               c low_range=0
  81.               c pan=0x40
  82.               c pan_freq_scale=0
  83.               LFO tremolo=tremolo infos
  84.               LFO vibrato=vibrato infos
  85.               c velocity_mode=1
  86.               c attenuation=0
  87.               i freq_scale=0x400 or 0 when used freq_center
  88.               c freq_center=scale_factor MIDI note(root_freq)
  89.               c layer_event=1
  90.               w penv.id.major_id=0
  91.               w penv.id.minor_id=0
  92.               w venv.id.major_id=iw_patch.id.major_id (link ident.)
  93.               w venv.id.minor_id=layer number
  94. 00060 -       = foolows iw_layer.nwaves wave subsections
  95. 00060 - 0004  = "WAVE" id
  96. 00064 - 0004  = dword len of wave subsection (0x25)
  97. 00068 - 0025  = iw_wave: w id.major_id=0x200+iw_layer.id.minor_id
  98.              w id.minor_id=wave number (0 .. nwaves-1)
  99.              d size=wave size (in samples not in bytes!)
  100.              d start=start wave offset (SAHI:SALI)
  101.              d loopstart=loop wave offset (SASHI:SASLI)
  102.              d loopend=loop wave offset (SAEHI:SAELI)
  103.              d m_start=0 (?)
  104.              d sample_ratio=45158.4/sam_rate*root_frequency
  105.              c attenuation=0
  106.              c low_note=midi note (low_frequency) || 0(drums)
  107.              c high_note=midi note (high_frequency) || 127(drums)
  108.              c format=??:BiDirect:LoopOn:LoopFwd:Signed:8bit (7..0)
  109.              c m_format=0 (?)
  110.              w data_id.major_id=0xFF00+bankNum (.DAT file ident.)
  111.              w data_id.minor_id=0
  112.  
  113.  
  114. DAT file - data of samples
  115. offset, len, desc
  116. 00000 - 0020  = char[20] description of DAT file
  117. 00020 - ????  = wave data + 8 bytes of zeros for every sample
  118.